# Update group information

Updates the group's basic information including name, display name, description, and privacy settings. Requires GroupData.Manage permission. The group owner and administrators can perform this operation. Changes to privacy settings may affect member access and visibility.

RBAC: requires GroupData.Manage

Endpoint: PUT /api/v1/groups/{groupId}
Version: 1.0
Security: header

## Path parameters:

  - `groupId` (string, required)
    The unique identifier of the group
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

## Request fields (application/json):

  - `name` (string,null)
    New unique group name. This will update the group's URL. Must be unique across the platform. Null to keep existing name.

  - `displayName` (string,null)
    Updated display name for the group. This is what users see in the UI. Null to keep existing.

  - `description` (string,null)
    Updated group description. Null to keep existing description.

  - `fields` (object,null)
    Custom fields for the group; processed like user's fields. Null to keep existing.

  - `refreshedAt` (string,null)
    Group's last refresh timestamp. Null to keep existing.
    Example: "2022-03-10T16:15:50Z"

  - `meta` (object,null)
    Group metadata including color. Null to keep existing.

  - `meta.color` (string, required)
    Group color in HEX format

  - `privacy` (string,null)
    Who can access the group's content. Null to keep existing.
    Enum: "PUBLIC", "PRIVATE"

  - `visibility` (string,null)
    How discoverable the group is. Null to keep existing.
    Enum: "VISIBLE", "UNLISTED", "HIDDEN"

  - `joinMode` (string,null)
    How users can join the group. Null to keep existing.
    Enum: "OPEN", "APPROVAL", "INVITE_ONLY"

  - `bannerId` (string,null)
    Banner upload id. Null to keep existing.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `avatarId` (string,null)
    Avatar upload id. Null to keep existing.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `location` (object,null)
    Group's location. Null to keep existing.

  - `location.geo` (object,null, required)
    Coordinates and other geo data

  - `location.geo.latitude` (number, required)

  - `location.geo.longitude` (number, required)

  - `location.geo.altitude` (number,null)

  - `location.geo.accuracy` (number,null)

  - `location.geo.verticalAccuracy` (number,null)

  - `location.geo.speed` (number,null)

  - `location.geo.bearing` (number,null)

  - `location.geo.timestamp` (integer,null)

  - `location.name` (string,null, required)

  - `location.autoUpdate` (boolean, required)

  - `location.show` (boolean, required)

  - `timezone` (object,null)
    Group's timezone. Null to keep existing.

  - `timezone.ianaTimezone` (string,null, required)

  - `timezone.autoUpdate` (boolean, required)

  - `timezone.show` (boolean, required)

## Response 200 fields (application/json):

  - `stats` (object)
    Group statistics

  - `stats.posts` (integer, required)
    Total number of posts

  - `stats.postsLast24h` (integer, required)
    Posts created in the last 24 hours

  - `stats.comments` (integer, required)
    Total number of comments

  - `stats.totalStorageBytes` (integer, required)
    Total uploaded bytes

  - `stats.avgPostsPerDay` (number, required)
    Average posts per day over the last 30 days

  - `stats.avgBytesPerDay` (number, required)
    Average uploaded bytes per day over the last 30 days

  - `stats.members` (integer, required)
    Count of active members in the group

  - `stats.totalEvents` (integer, required)
    Total group events recorded

  - `meta` (object, required)
    group metadata including color

  - `meta.color` (string, required)
    Group color in HEX format

  - `privacy` (string, required)
    who can access the group's content
    Enum: "PUBLIC", "PRIVATE"

  - `visibility` (string, required)
    how discoverable the group is
    Enum: "VISIBLE", "UNLISTED", "HIDDEN"

  - `joinMode` (string, required)
    how users can join the group
    Enum: "OPEN", "APPROVAL", "INVITE_ONLY"

  - `location` (object,null)
    group's location

  - `location.geo` (object,null, required)
    Coordinates and other geo data

  - `location.geo.latitude` (number, required)

  - `location.geo.longitude` (number, required)

  - `location.geo.altitude` (number,null)

  - `location.geo.accuracy` (number,null)

  - `location.geo.verticalAccuracy` (number,null)

  - `location.geo.speed` (number,null)

  - `location.geo.bearing` (number,null)

  - `location.geo.timestamp` (integer,null)

  - `location.name` (string,null, required)

  - `location.autoUpdate` (boolean, required)

  - `location.show` (boolean, required)

  - `timezone` (object,null)
    group's timezone

  - `timezone.ianaTimezone` (string,null, required)

  - `timezone.autoUpdate` (boolean, required)

  - `timezone.show` (boolean, required)

  - `isMember` (boolean,null)
    Whether the current viewer is a member of the group

  - `pin` (integer,null)
    Pin order number if group is pinned by viewer (null if not pinned)

  - `canManage` (boolean,null)
    Whether the current viewer can manage this group (owner, admin, or moderator)

  - `isOwner` (boolean,null)
    Whether the current viewer is an owner or admin of this group

  - `roles` (array,null)
    Viewer's roles in this group. Only populated in admin endpoints.

  - `groupId` (string, required)
    internal id of this group
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `groupName` (string, required)
    unique group name

  - `domain` (string, required)
    Group's domain

  - `local` (boolean, required)
    Whether this group is local to this server

  - `displayName` (string, required)
    full name of the group

  - `summary` (string, required)
    Group description

  - `uri` (string, required)
    URI of this group

  - `publicKey` (string, required)
    Group's public key for ActivityPub

  - `fields` (object)
    Custom fields for the group

  - `type` (string, required)
    the type of this group
    Enum: "CHANNEL", "INTEREST_GROUP", "ORGANIZATION"

  - `membersUrl` (string, required)
    URL to group members

  - `banner` (object,null)
    Group's header/banner upload

  - `banner.uploadId` (string, required)
    Internal id
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `banner.uploaderId` (string,null)
    User who physically uploaded this file. Null for platform-owned uploads (e.g., default covers). This is an audit/meta field — use ownerId for authorization.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `banner.ownerId` (string, required)
    Entity that owns this upload (user, channel/group, or event). TypeID prefix indicates the owner type.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `banner.attachedToId` (string,null)
    Entity this upload is attached to (e.g., a post or event). NULL for standalone uploads like avatars, covers, or media library items.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `banner.uploadType` (string, required)
    Type of the upload
    Enum: "VIDEO", "IMAGE", "AUDIO", "DOCUMENT", "OTHER"

  - `banner.meta` (object)
    Meta data

  - `banner.meta.blurhash` (string,null)

  - `banner.meta.name` (string,null)

  - `banner.meta.altText` (string,null)

  - `banner.size` (integer, required)
    Size in bytes of all the files in this upload

  - `banner.files` (array, required)
    List of all the files this upload has

  - `banner.files.uri` (string,null, required)
    Full url of the file

  - `banner.files.fileId` (string, required)
    File id
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `banner.files.extension` (string, required)
    File extension
    Example: "mp4"

  - `banner.files.original` (boolean, required)
    true if this file is original, false if it is a derivative

  - `banner.files.meta` (object, required)
    File metadata. Contains optional values for width, height etc.

  - `banner.files.meta.duration` (number,null)
    Video duration in seconds

  - `banner.files.meta.width` (integer,null)
    Media width

  - `banner.files.meta.height` (integer,null)
    Media height

  - `banner.files.meta.codec` (string,null)
    Video codec

  - `banner.files.meta.rotate` (integer,null)
    Rotation in degrees

  - `banner.files.size` (integer, required)
    File size in bytes

  - `banner.files.createdAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `banner.files.updatedAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `banner.files.type` (string, required)
    File type
    Enum: "VIDEO", "IMAGE", "AUDIO", "DOCUMENT", "OTHER"

  - `banner.tags` (array, required)
    List of tags attached to upload
    Enum: "Post", "Avatar", "Header", "Album", "Emoji", "Event"

  - `banner.error` (string,null)
    Upload processing error

  - `banner.cached` (boolean)
    true if cached

  - `banner.logs` (string,null)
    Logs

  - `banner.remote` (boolean)
    true if this upload is remote

  - `banner.createdAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `banner.updatedAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `avatar` (object,null)
    Group's avatar

  - `avatar.uploadId` (string, required)
    Internal id
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `avatar.uploaderId` (string,null)
    User who physically uploaded this file. Null for platform-owned uploads (e.g., default covers). This is an audit/meta field — use ownerId for authorization.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `avatar.ownerId` (string, required)
    Entity that owns this upload (user, channel/group, or event). TypeID prefix indicates the owner type.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `avatar.attachedToId` (string,null)
    Entity this upload is attached to (e.g., a post or event). NULL for standalone uploads like avatars, covers, or media library items.
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `avatar.uploadType` (string, required)
    Type of the upload
    Enum: "VIDEO", "IMAGE", "AUDIO", "DOCUMENT", "OTHER"

  - `avatar.meta` (object)
    Meta data

  - `avatar.meta.blurhash` (string,null)

  - `avatar.meta.name` (string,null)

  - `avatar.meta.altText` (string,null)

  - `avatar.size` (integer, required)
    Size in bytes of all the files in this upload

  - `avatar.files` (array, required)
    List of all the files this upload has

  - `avatar.files.uri` (string,null, required)
    Full url of the file

  - `avatar.files.fileId` (string, required)
    File id
    Example: "us_01hxcvk1hjexere4pvtrj0ymqq"

  - `avatar.files.extension` (string, required)
    File extension
    Example: "mp4"

  - `avatar.files.original` (boolean, required)
    true if this file is original, false if it is a derivative

  - `avatar.files.meta` (object, required)
    File metadata. Contains optional values for width, height etc.

  - `avatar.files.meta.duration` (number,null)
    Video duration in seconds

  - `avatar.files.meta.width` (integer,null)
    Media width

  - `avatar.files.meta.height` (integer,null)
    Media height

  - `avatar.files.meta.codec` (string,null)
    Video codec

  - `avatar.files.meta.rotate` (integer,null)
    Rotation in degrees

  - `avatar.files.size` (integer, required)
    File size in bytes

  - `avatar.files.createdAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `avatar.files.updatedAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `avatar.files.type` (string, required)
    File type
    Enum: "VIDEO", "IMAGE", "AUDIO", "DOCUMENT", "OTHER"

  - `avatar.tags` (array, required)
    List of tags attached to upload
    Enum: "Post", "Avatar", "Header", "Album", "Emoji", "Event"

  - `avatar.error` (string,null)
    Upload processing error

  - `avatar.cached` (boolean)
    true if cached

  - `avatar.logs` (string,null)
    Logs

  - `avatar.remote` (boolean)
    true if this upload is remote

  - `avatar.createdAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `avatar.updatedAt` (string, required)
    Example: "2022-03-10T16:15:50Z"

  - `deletedAt` (string,null)
    Group deletion timestamp
    Example: "2022-03-10T16:15:50Z"

  - `createdAt` (string)
    Group's creation timestamp
    Example: "2022-03-10T16:15:50Z"

  - `updatedAt` (string)
    Group's last update timestamp
    Example: "2022-03-10T16:15:50Z"

  - `refreshedAt` (string)
    Group's last refresh timestamp
    Example: "2022-03-10T16:15:50Z"

  - `secret` (boolean)

## Response 400 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation

## Response 401 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation

## Response 403 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation

## Response 404 fields (application/json):

  - `errorCode` (string, required)
    Error code

  - `message` (string, required)
    Error message

  - `docUrl` (string)
    Link to documentation


